針對核心類別特徵Role(身分:Student vs. Professional ),展開多維度的橫向對比分析,檢視兩個族群在「每日螢幕使用時數」、「每日睡眠時間」以及「用眼疲勞綜合風險等級(Digital_Eye_Strain_Risk)」上的結構性差異。
一、實作前情境:學生真的比上班族輕鬆嗎?
在前面的分析中,我們探討了「抗藍光濾鏡」與「每小時休息頻率」這兩項個人微觀習慣。然而,生活作息與用眼環境往往受到「社會角色」的宏觀制約:
在校學生(266人,53.2%):面對線上課程、打報告、滑社群與手遊娛樂,作息可能較不規律、常有熬夜現象。
職場人士(234人,46.8%):面對固定工時、長時間盯雙螢幕處理業務與開會,螢幕暴露時間是否更具強制性與固定性?
這兩群人幾乎各佔資料集的一半(接近1:1),是進行分群比較的極佳樣本。今天我們就來驗證:學生與職場人士,究竟誰的螢幕暴露時間更長?誰面臨更高比例的「高疲勞風險」?
二、撰寫族群橫向對比視覺化腳本
在Colab中新增程式碼儲存格,左圖比較兩族群在「螢幕時數」上的連續分佈形態(KDE),右圖則透過交叉表呈現兩族群在「風險分級(Low/Medium/High)」的百分比堆疊結構:
# ==========================================
# Day12:身分組群對比(Student vs. Professional)
# ==========================================
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.font_manager as fm
import pandas as pd
# 引用中文字型
font_path = 'NotoSansTC-Regular.otf'
my_font = fm.FontProperties(fname=font_path)
# 1. 建立1x2畫布佈局
fig, axes = plt.subplots(1, 2, figsize=(16, 6))
sns.set_theme(style="whitegrid")
# 設定角色代表色:學生使用溫暖橙色,職場人士使用沈穩靛青
role_palette = {'Student': '#f39c12', 'Professional': '#2c3e50'}
# --- 圖1:兩大族群每日螢幕使用時數 KDE 分佈 ---
sns.kdeplot(
data=df,
x='Daily_Screen_Hours',
hue='Role',
palette=role_palette,
fill=True,
common_norm=False,
alpha=0.35,
linewidth=2,
ax=axes[0]
)
axes[0].set_title('學生 vs. 職場人士:每日螢幕使用時數分佈', fontproperties=my_font, fontsize=14, fontweight='bold')
axes[0].set_xlabel('每日螢幕使用時數(小時/天)', fontproperties=my_font, fontsize=12)
axes[0].set_ylabel('核密度估計 (Density)', fontproperties=my_font, fontsize=12)
# 手動設定圖例中文字型
legend_0 = axes[0].get_legend()
if legend_0:
legend_0.set_title('身分角色')
plt.setp(legend_0.get_texts(), fontproperties=my_font)
plt.setp(legend_0.get_title(), fontproperties=my_font)
# --- 圖2:兩大族群用眼疲勞風險分級佔比 (百分比堆疊圖) ---
# 計算百分比交叉表
risk_order = ['Low', 'Medium', 'High']
risk_crosstab = pd.crosstab(df['Role'], df['Digital_Eye_Strain_Risk'], normalize='index')[risk_order] * 100
risk_colors = ['#5dade2', '#f4d03f', '#e74c3c'] # 低風險藍、中風險黃、高風險紅
risk_crosstab.plot(
kind='bar',
stacked=True,
color=risk_colors,
ax=axes[1],
width=0.45,
edgecolor='white'
)
axes[1].set_title('學生 vs. 職場人士:疲勞風險等級佔比對比', fontproperties=my_font, fontsize=14, fontweight='bold')
axes[1].set_xlabel('身分角色', fontproperties=my_font, fontsize=12)
axes[1].set_ylabel('佔比百分比 (%)', fontproperties=my_font, fontsize=12)
axes[1].set_xticks([0, 1])
axes[1].set_xticklabels(['職場人士 (Professional)', '學生 (Student)'], fontproperties=my_font, rotation=0, fontsize=11)
axes[1].set_ylim(0, 100)
# 手動設定右圖圖例
legend_1 = axes[1].legend(title='疲勞風險等級', labels=['低度風險 (Low)', '中度風險 (Medium)', '高度風險 (High)'], loc='upper right')
plt.setp(legend_1.get_texts(), fontproperties=my_font)
plt.setp(legend_1.get_title(), fontproperties=my_font)
plt.tight_layout()
plt.show()
# 2. 輸出詳細指標量化表
print("=== 學生與職場人士生活型態與症狀量化對比 ===")
role_summary = df.groupby('Role').agg(
人數=('Age', 'count'),
平均年齡=('Age', 'mean'),
平均螢幕時數=('Daily_Screen_Hours', 'mean'),
平均睡眠時數=('Sleep_Hours', 'mean'),
平均乾澀分=('Eye_Dryness_Level', 'mean'),
平均眼痛分=('Eye_Pain_Level', 'mean')
).reset_index()
display(role_summary.round(2))
print("\n=== 疲勞風險分級百分比交叉表 (%) ===")
display(risk_crosstab.round(1))


三、圖表解讀與客觀數據分析(校園 vs 職場生態實證)
結合KDE密度分佈曲線、百分比堆疊圖與精確量化交叉表,可得出三大關鍵洞察:
1.數位暴露曲線(KDE):職場人士偏向極端高工時,學生集中於中高區間
(a)圖形走勢:
2.生理作息與自覺症狀:高度同質化的疲勞底線
(a)睡眠時長:職場人士平均6.45小時,學生平均6.40小時,兩者相差僅3分鐘,顯示現代不論是校園還是職場,普遍存在睡眠時間被壓縮的生理常態(皆顯著低於理想的7~8小時)。
(b)症狀細分:
3.疲勞風險分級:職場人士的高風險結構更顯著
(a)交叉百分比統計:
低度風險:學生組佔24.4%,略高於職場人士的22.6%。
中度風險:學生組佔48.1%,職場人士佔45.7%,兩者均有近半數受試者處於亞健康的中度疲勞狀態。
高度風險:職場人士達到31.6%,明顯高出學生組的27.4%(差距達4.2個百分點)。
(b)工程與臨床推論:
雖然兩者在螢幕使用平均時長上僅差距0.2小時,但職場人士面臨的工作壓力、責任強度以及可能更缺乏自主彈性調整用眼步調的空間,使得其轉化為「高度疲勞風險」的比例突破三成大關。
這組對比清晰地證明了:評估用眼健康時,除了單純看螢幕時數外,身分角色背後的「使用情境與工作形態」扮演了決定性的放大因子!